core: Add OstreeCommitSizesEntry type
authorDan Nicholson <nicholson@endlessm.com>
Thu, 19 Dec 2019 19:50:46 +0000 (12:50 -0700)
committerDan Nicholson <nicholson@endlessm.com>
Tue, 21 Jan 2020 03:44:12 +0000 (20:44 -0700)
This will be used when reading out entries in the `ostree.sizes`
metadata. Each entry corresponds to an object in the metadata array.

apidoc/ostree-sections.txt
src/libostree/libostree-devel.sym
src/libostree/ostree-autocleanups.h
src/libostree/ostree-core.c
src/libostree/ostree-core.h

index 1ef4bbf638b07ffb7448be31cba51a8027c6178f..33035ca742d91aef64d719cd56babd37036344a2 100644 (file)
@@ -151,7 +151,13 @@ ostree_validate_structureof_dirmeta
 ostree_commit_get_parent
 ostree_commit_get_timestamp
 ostree_commit_get_content_checksum
+OstreeCommitSizesEntry
+ostree_commit_sizes_entry_new
+ostree_commit_sizes_entry_copy
+ostree_commit_sizes_entry_free
 ostree_check_version
+<SUBSECTION Standard>
+ostree_commit_sizes_entry_get_type
 </SECTION>
 
 <SECTION>
index d1666176d83bbf56383a44b088d69f0ac3a29327..8e7473c596179969321028ffcb7113fdb1cc07ce 100644 (file)
 
 /* Add new symbols here.  Release commits should copy this section into -released.sym. */
 LIBOSTREE_2019.7 {
+global:
+  ostree_commit_sizes_entry_copy;
+  ostree_commit_sizes_entry_free;
+  ostree_commit_sizes_entry_get_type;
+  ostree_commit_sizes_entry_new;
   ostree_sysroot_initialize;
   ostree_sysroot_is_booted;
   ostree_sysroot_set_mount_namespace_in_use;
index c07f88a8794cc3acc24b8fe2c3008856a3bbcd1b..c9692ebeba87857e63246303a9bc8b8ab0090872 100644 (file)
@@ -49,6 +49,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeRepoDevInoCache, ostree_repo_devino_cache_u
 
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeAsyncProgress, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeBootconfigParser, g_object_unref)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeCommitSizesEntry, ostree_commit_sizes_entry_free)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeDeployment, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeGpgVerifyResult, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeKernelArgs, ostree_kernel_args_free)
index 3d16757efd748f6afa803ff396ef2ede4dd475e2..160f954fb0797413821939d771be70e2b687d281 100644 (file)
@@ -2430,6 +2430,76 @@ ostree_commit_get_content_checksum (GVariant *commit_variant)
   return g_strdup (hexdigest);
 }
 
+G_DEFINE_BOXED_TYPE (OstreeCommitSizesEntry, ostree_commit_sizes_entry,
+                     ostree_commit_sizes_entry_copy, ostree_commit_sizes_entry_free)
+
+/**
+ * ostree_commit_sizes_entry_new:
+ * @checksum: (not nullable): object checksum
+ * @objtype: object type
+ * @unpacked: unpacked object size
+ * @archived: compressed object size
+ *
+ * Create a new #OstreeCommitSizesEntry for representing an object in a
+ * commit's "ostree.sizes" metadata.
+ *
+ * Returns: (transfer full) (nullable): a new #OstreeCommitSizesEntry
+ * Since: 2019.7
+ */
+OstreeCommitSizesEntry *
+ostree_commit_sizes_entry_new (const gchar      *checksum,
+                               OstreeObjectType  objtype,
+                               guint64           unpacked,
+                               guint64           archived)
+{
+  g_return_val_if_fail (checksum == NULL || ostree_validate_checksum_string (checksum, NULL), NULL);
+
+  g_autoptr(OstreeCommitSizesEntry) entry = g_new0 (OstreeCommitSizesEntry, 1);
+  entry->checksum = g_strdup (checksum);
+  entry->objtype = objtype;
+  entry->unpacked = unpacked;
+  entry->archived = archived;
+
+  return g_steal_pointer (&entry);
+}
+
+/**
+ * ostree_commit_sizes_entry_copy:
+ * @entry: (not nullable): an #OstreeCommitSizesEntry
+ *
+ * Create a copy of the given @entry.
+ *
+ * Returns: (transfer full) (nullable): a new copy of @entry
+ * Since: 2019.7
+ */
+OstreeCommitSizesEntry *
+ostree_commit_sizes_entry_copy (const OstreeCommitSizesEntry *entry)
+{
+  g_return_val_if_fail (entry != NULL, NULL);
+
+  return ostree_commit_sizes_entry_new (entry->checksum,
+                                        entry->objtype,
+                                        entry->unpacked,
+                                        entry->archived);
+}
+
+/**
+ * ostree_commit_sizes_entry_free:
+ * @entry: (transfer full): an #OstreeCommitSizesEntry
+ *
+ * Free given @entry.
+ *
+ * Since: 2019.7
+ */
+void
+ostree_commit_sizes_entry_free (OstreeCommitSizesEntry *entry)
+{
+  g_return_if_fail (entry != NULL);
+
+  g_free (entry->checksum);
+  g_free (entry);
+}
+
 /* Used in pull/deploy to validate we're not being downgraded */
 gboolean
 _ostree_compare_timestamps (const char   *current_rev,
index 69477a75965f597a4cbe8945608e6f1821eedf33..a61ae06c05ab8e6620643a5036e3e5cce57fe14d 100644 (file)
@@ -521,6 +521,38 @@ guint64  ostree_commit_get_timestamp         (GVariant  *commit_variant);
 _OSTREE_PUBLIC
 gchar *  ostree_commit_get_content_checksum  (GVariant  *commit_variant);
 
+/**
+ * OstreeCommitSizesEntry:
+ * @checksum: (not nullable): object checksum
+ * @objtype: object type
+ * @unpacked: unpacked object size
+ * @archived: compressed object size
+ *
+ * Structure representing an entry in the "ostree.sizes" commit metadata. Each
+ * entry corresponds to an object in the associated commit.
+ *
+ * Since: 2019.5
+ */
+typedef struct {
+  gchar *checksum;
+  OstreeObjectType objtype;
+  guint64 unpacked;
+  guint64 archived;
+} OstreeCommitSizesEntry;
+
+_OSTREE_PUBLIC
+GType ostree_commit_sizes_entry_get_type (void);
+
+_OSTREE_PUBLIC
+OstreeCommitSizesEntry *ostree_commit_sizes_entry_new (const gchar      *checksum,
+                                                       OstreeObjectType  objtype,
+                                                       guint64           unpacked,
+                                                       guint64           archived);
+_OSTREE_PUBLIC
+OstreeCommitSizesEntry *ostree_commit_sizes_entry_copy (const OstreeCommitSizesEntry *entry);
+_OSTREE_PUBLIC
+void                    ostree_commit_sizes_entry_free (OstreeCommitSizesEntry *entry);
+
 _OSTREE_PUBLIC
 gboolean ostree_check_version (guint required_year, guint required_release);